//
//  WBNetworkTools.swift
//  WBWeiBo
//
//  Created by 王斌 on 16/7/10.
//  Copyright © 2016年 王斌. All rights reserved.
//

import UIKit
import AFNetworking

//  定义请求类型的枚举,默认值从0开始

enum RequestType:Int{
    
    case GET
    case POST
}



//  网络请求工具类
class WBNetworkTools:AFHTTPSessionManager{
    
    //  单例全局访问点
    static let sharedTools:WBNetworkTools = {
        
        let tools = WBNetworkTools()
        
        tools.responseSerializer.acceptableContentTypes?.insert("text/plain")
        
        return tools
    }()
    
    
    //  封装get/post请求
    func request(type:RequestType, url:String, params:AnyObject?,callBack:(response:AnyObject?, error:NSError?) ->()){
        
        if type == .GET{
            GET(url, parameters: params, progress: nil, success: { (_, response) -> Void in
                
                callBack(response: response, error: nil)
                
                }, failure: { (_, error) -> Void in
                    callBack(response: nil, error: error)
            })
        }else{
            
            POST(url, parameters: params, progress: nil, success: { (_,response) -> Void in
                
                callBack(response: response, error: nil)
                
                }, failure: { (_, error) -> Void in
                    callBack(response: nil, error: error)
            })
        }
    }
}



//  MRAK: -- 发送微博相关接口
extension WBNetworkTools{
    
    func upload(access_token:String,status:String,image:UIImage,callBack:(response:AnyObject?,error:NSError?) ->()){
        
        // 准备url地址
        let url = "https://upload.api.weibo.com/2/statuses/upload.json"
    
        // 准备参数
        let params = [
        "access_token":access_token,
         "status":status
        ]
        
        //  compressionQuality质量系数  0-1, 系数越小质量越低
        let imageData = UIImageJPEGRepresentation(image, 0.5)
        
        // 上传图片接口
        POST(url, parameters: params, constructingBodyWithBlock: { (formData) -> Void in
            formData.appendPartWithFileData(imageData!, name: "pic", fileName: "test", mimeType: "image/jpeg")
            }, progress: nil, success: { (_, response) -> Void in
               
                callBack(response: response, error: nil)
                
            }) { (_, error) -> Void in
                
                callBack(response: nil, error: error)
        }
    
    }
    
    
    /**
    发送文字微博接口
    
    - parameter access_token: 访问令牌
    - parameter status:       微博内容
    - parameter callBack:     数据回调
    */
    func update(access_token: String, status: String, callBack: (response: AnyObject?, error: NSError?) -> ()) {
        //  准备接口地址
        let url = "https://api.weibo.com/2/statuses/update.json"
        //  准备参数
        let params = [
            "access_token": access_token,
            "status": status
        ]
        //  使用共有函数进行网络请求数据
        request(.POST, url: url, params: params, callBack: callBack)
    }
    
}
    




//  MARK - OAuth登录相关接口
extension WBNetworkTools{
    
    // 通过授权码(code)获取accesstoken
    func requestAccesstoken(code:String, callBack:(response:AnyObject?,error:NSError?) ->()){
        
        //  准备接口地址
        let url = "https://api.weibo.com/oauth2/access_token"
        
        //  准备参数
        let params = [
            "client_id": WeiboAppKey,
            "client_secret": WeiboaAppSecret,
            "grant_type": "authorization_code",
            "code": code,
            "redirect_uri": WeiboRedirect_Uri
        ]
        
        
        //  使用通用接口去请求
        request(.POST, url: url, params: params, callBack: callBack)
    }
    
    
    //  获取用户信息
    func requestUserInfo(userAccount:WBUserAccount,callBack:(response:AnyObject?,error:NSError?) ->()){
        
        //   请求接口地址
         let url = "https://api.weibo.com/2/users/show.json"
        
        //   准备请求参数
        //   int64,根字符放在一起编译不通过,需要转换成字符串
        let params = [
        
       "access_token": userAccount.access_token!,
        "uid": "\(userAccount.uid)"
        ]
        
        request(.GET, url: url, params: params, callBack: callBack)
    }
}




//  MARK : -- 首页微博相关接口
extension WBNetworkTools{
    
    // 获取微博数据
    func loadStatus(maxId:Int64 = 0,sinceId:Int64 = 0,callBack:(response:AnyObject?,error
        :NSError?) ->()){
            
            //  准备接口地址
            let url = "https://api.weibo.com/2/statuses/friends_timeline.json"
  
            //  准备参数
            let params = [
                "access_token": WBUserAccountViewModel.shareUserAccount.accessToken!,
                "max_id":"\(maxId)",
                "since_id":"\(sinceId)"
            ]
            
            print(url + "?access_token=" + WBUserAccountViewModel.shareUserAccount.accessToken!)
            
            request(.GET, url: url, params: params, callBack: callBack)
    }
}


















